iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0

卷積神經網路(Convolutional Neural Network)

簡稱 CNN,一種人工神經網路,處理資料具有 格狀結構(grid-like structure) 應用
CNN特點是使用 卷積運算(convolution operation) 代替一般神經網路 全連接運算(fully-connected operation)

https://ithelp.ithome.com.tw/upload/images/20240805/20163257yWaIjONMPH.png
圖片來源:初探卷積神經網路

CNN架構層

CNN優點

  • 局部連接: 卷積核只與輸入圖像的局部區域連接,減少參數數量
  • 權重共享: 同一個卷積核在整個圖像上共享權重,提高模型泛化能力
  • 層次化特徵提取: 深層卷積層能夠提取到更抽象高層特徵

CNN應用

  • 影像識別(image recognition)
  • 物件偵測(object detection)
  • 影像分割(image segmentation)
  • 自然語言處理(natural language processing)
  • 語音識別(speech recognition)

CNN公式

  • 卷積運算(convolution operation)
  • 池化運算(pooling operation)
  • 激勵函數(activation function)
  • 損失函數(loss function)
  • 優化演算法(optimization algorithm)

卷積運算

是CNN核心運算,提取輸入資料局部特徵。卷積運算將輸入資料與卷積核進行逐元素相乘,然後對結果進行累加。卷積核大小決定卷積運算的感受野,也就是卷積運算輸出每個元素所依賴輸入資料範圍
https://ithelp.ithome.com.tw/upload/images/20240805/20163257wIUr2ZooIc.png
圖片來源:(https://www.researchgate.net/figure/Convolution-Operation-or-kernels-For-each-input-image-the-convolution-operation-is_fig2_350487754)

O = I * K

O 卷積運算輸出
I 輸入資料
K 卷積核

輸入一個 3x3 矩陣,卷積核為一個 2x2 矩陣,則卷積運算輸出一個 2x2 矩陣

I = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

K = [[1, 2],
     [3, 4]]

O = [[19, 22, 25],
     [43, 50, 57]]

池化運算

用在對卷積運算輸出的特徵進行降維和壓縮,以減少模型的參數量和計算量。通常採用 最大池化(max pooling)平均池化(average pooling) 兩種方式

  • 最大池化運算 會對輸入資料每個子區域取 最大值 作為輸出
  • 平均池化運算 會對輸入資料每個子區域取 平均值 作為輸出

O = pool(I)

O 池化運算輸出
I 輸入資料
pool 池化函數,例如:最大池化或平均池化

輸入一個 4x4 矩陣,採用最大池化運算,池化窗口大小為 2x2,則池化運算輸出一個 2x2 矩陣

I = [[1, 2, 3, 4],
     [5, 6, 7, 8],
     [9, 10, 11, 12],
     [13, 14, 15, 16]]

O = [[5, 7],
     [11, 13]]

激勵函數

對神經元的輸出進行非線性變換,提高模型表達能力。常用激勵函數包括 Sigmoid函數ReLU函數Tanh函數
https://ithelp.ithome.com.tw/upload/images/20240805/20163257B6nCTjoZ5k.png
圖片來源:(https://www.researchgate.net/figure/Activation-function-ReLu-ReLu-Rectified-Linear-Activation_fig2_370465617)

  • Sigmoid函數

f(x) = sigmoid(x) = 1 / (1 + exp(-x))

  • ReLU函數

f(x) = relu(x) = max(0, x)

  • Tanh函數

f(x) = tanh(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))

損失函數

衡量模型預測值與真實值之間差距。常用損失函數包括 均方誤差(MSE)交叉熵(cross-entropy)

  • MSE損失函數

L(y, y') = MSE(y, y') = (y - y')^2

  • 交叉熵損失函數

L(y, y') = cross-entropy(y, y') = -y' * log(y) - (1 - y') * log(1 - y)

優化演算法

更新模型參數,以降低損失函數的值。常用優化演算法包括 梯度下降(gradient descent)Adam

  • 梯度下降演算法

theta = theta - alpha * grad(L(theta))

CNN程式碼(Keras=TensorFlow的高階API)

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D,    
Flatten, Dense

# 假設資料已經準備好,X_train, y_train, X_test, y_test 分別為訓練集和測試集的影像資料和標籤

# 建立模型
model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
    MaxPooling2D((2, 2)),
    Flatten(),
    Dense(10, activation='softmax')
])

#    
編譯模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 訓練模型
model.fit(X_train, y_train, epochs=5)

# 評估模型
test_loss, test_acc = model.evaluate(X_test, y_test)
print('Test accuracy:', test_acc)

資料來源:卷積神經網路
卷積神經網路(Convolutional neural network, CNN) — CNN運算流程
Day 06:處理影像的利器 -- 卷積神經網路(Convolutional Neural Network)


上一篇
Day4-DNN
下一篇
Day6-RNN
系列文
Let's Go To The AI Party!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言